package cn.iocoder.yudao.module.scrm.framework.config.rpc;

import cn.iocoder.yudao.module.system.api.cp.RadarApi;
import cn.iocoder.yudao.module.system.api.dept.DeptApi;
import cn.iocoder.yudao.module.system.api.dept.PostApi;
import cn.iocoder.yudao.module.system.api.dict.DictDataApi;
import cn.iocoder.yudao.module.system.api.permission.PermissionApi;
import cn.iocoder.yudao.module.system.api.social.SocialClientApi;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Configuration;

/**
 * @Author LiZhiMin
 * @Date 2024/5/22 19:13
 * 特点
 * 这是一个全局的配置类，用于启用多个 Feign 客户端。
 * 使用 @EnableFeignClients 注解指定了需要扫描的 Feign 客户端接口。
 * proxyBeanMethods = false 表示禁用代理方法，通常用于提高性能，尤其是在 Bean 方法不需要被代理时。
 * 优缺点
 * 优点:
 * 可以集中管理和配置多个 Feign 客户端，方便维护。
 * 适合大规模应用，便于统一处理请求拦截器、错误处理等。
 * 缺点:
 * 可能会增加配置的复杂性，尤其在客户端数量较多时。
 * 不能单独为某个客户端进行特定配置，只能使用全局配置。
 * 调用原理：在启动 Spring Boot 应用时，Spring 会扫描 RpcConfiguration 类并启用 Feign 客户端。
 * @EnableFeignClients 会自动扫描并注册指定的 Feign 客户端接口，将它们作为 Spring Bean 管理。
 * 当调用这些 Feign 客户端方法时，Feign 会生成实现类，通过底层的 HTTP 客户端（如 Ribbon、OkHttp 等）发起远程调用。
 */

@Configuration(proxyBeanMethods = false)
@EnableFeignClients(clients =  {AdminUserApi.class, DeptApi.class, DictDataApi.class, PostApi.class,
        PermissionApi.class, RadarApi.class, SocialClientApi.class})
public class RpcConfiguration {
}

